/*******************************************************************************
** 文件名称：eeprom.c
** 文件作用：EEPROM
** 编写作者：Tom Free 付瑞彪
** 编写时间：2021-06-06
** 文件备注：
** 更新记录：
**           2021-06-06 -> 创建文件
**                                                            <Tom Free 付瑞彪>
**
**           Copyright (c) 2018-2021 付瑞彪 All Rights Reserved
**
**       1 Tab == 4 Spaces     UTF-8     ANSI C Language(C99)
*******************************************************************************/

#include "eeprom.h"

/* 寄存器位定义 */
#define EERIE           3
#define EEMWE           2
#define EEWE            1
#define EERE            0

/* EEPROM写入数据 */
void eeprom_write(uint16_t addr, uint8_t dat)
{
    CHIP_NEW_CRITICAL();
    //CHIP_ENTER_CRITICAL();

    while (EECR & (1 << EEWE)); /* 等待上一次写操作完成 */
    EEAR = addr;                /* 写地址寄存器 */
    EEDR = dat;                 /* 写数据寄存器 */
    CHIP_ENTER_CRITICAL();
    EECR |= (1 << EEMWE);       /* 写进入写入模式 */
    EECR |= (1 << EEWE);        /* 启动写操作，必须在上一步骤之后4个时钟之内 */
    CHIP_EXIT_CRITICAL();
    while (EECR & (1 << EEWE)); /* 等待写完成 */

    //CHIP_EXIT_CRITICAL();
}

/* EEPROM读取数据 */
uint8_t eeprom_read(uint16_t addr)
{
    uint8_t dat;

    CHIP_NEW_CRITICAL();
    CHIP_ENTER_CRITICAL();

    while (EECR & (1 << EEWE)); /* 等待上一次写完成 */
    EEAR = addr;                /* 写地址寄存器 */
    EECR |= (1 << EERE);        /* 启动读操作 */
    dat = EEDR;                 /* 返回读出的数据 */

    CHIP_EXIT_CRITICAL();

    return dat;
}
